
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>评论列表</title>
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css">
  <style>
    .badge {
      float: right;
      margin-right: 5px;
    }

    .my-page {
      margin: 0 5px;
    }

    .all-page-content {
      margin-left: 5px;
    }

    .mt15 {
      margin-top: 15px;
    }
  </style>
</head>

<body style="padding: 15px;">

  <!-- 评论面板 -->
  <div class="panel panel-primary">
    <div class="panel-heading">
      <h3 class="panel-title">发表评论</h3>
    </div>
    <form class="panel-body cmt-form">
      <div>评论人：</div>
      <input type="text" class="form-control" name="username" autocomplete="off" />
      <div>评论内容：</div>
      <textarea class="form-control" name="content"></textarea>
      <button type="submit" class="btn btn-primary submit">发表评论</button>
    </form>
  </div>


  <!-- 评论列表 -->
  <ul class="mt15 list-group">
    <!-- <li class="list-group-item">
       <span>评论内容</span>
       <span class="badge del" style="cursor:pointer; background-color: lightgray;">删除</span> 
       <span class="badge" style="background-color: #F0AD4E;">评论时间：xxx</span>
       <span class="badge" style="background-color: #5BC0DE;">评论人：xxx</span>
    </li> -->
  </ul>

  <!-- 分页器 -->
  <nav class="mt15">
    <ul class="pagination">
      <li>
        <button class="last">
          <span>&laquo;</span>
        </button>
      </li>
      <li class="my-page">
        <span class="page-show"></span>
      </li>
      <li>
        <button class="next">
          <span>&raquo;</span>
        </button>
      </li>
      <li class="all-page-content">
        <span>共计:<span class="all-page"></span>页</span>
      </li>
    </ul>
  </nav>
  <script src="./lib/axios.js"></script>
  <script src="./lib/form-serialize.js"></script>
  <script>
    let page1 = 1
    let allPage = 1
    const msgList = document.querySelector('.list-group')
    // 1、页面打开展示所有评论列表数据(做完所有作业后可以试试做骨架屏)
    // 1.1封装一个函数获取所有评论的数据(向axios发送请求,用function封装getData函数)
    async function getData(page1) {
      try {
        let res = await axios({
          url: `https://hmajax.itheima.net/api/cmtlist?page=${page1}`,
        })
        allPage = res.allPage; // 在获取数据成功后，及时更新总页数
        return res.data
      } catch (err) {
        alert(err)
      }
    }
    // let page = 1
    // getData(page)
    // 1.2封装一个渲染函数把所有的评论渲染在指定区域（新建一个render函数，在里面调用getData函数，利用模板字符串将评论对象渲染在指定位置）
    async function renderPage() {
      let res = await getData(page1)

      let data = res.data
      // console.log(data)
      // console.log(res)
      let map1 = data.map(data => {
        return `
         <li class="list-group-item">
       <span>${data.content}</span>
       <span class="badge del" data-id="${data.id}" style="cursor:pointer; background-color: lightgray;">删除</span> 
       <span class="badge" style="background-color: #F0AD4E;">评论时间：${data.time}</span>
       <span class="badge" style="background-color: #5BC0DE;">评论人：${data.username}</span>
    </li>
        `}).join('')

        
      document.querySelector('.list-group').innerHTML = map1
      document.querySelector('.page-show').innerHTML = page1
      document.querySelector('.all-page').innerHTML = res.allPage
      return page1, res.allPage
    }
    renderPage()
    // 2、分页切换评论列表数据功能
    // 2.1 抓取当前页码的值，然后抓取两个翻页按钮，为两个翻页按钮注册点击事件，上翻当前页码数量-1，达到当前页码最小值时再点击按钮页面重新回到第一页，下翻当前页码数量+1，达到当前页码最大值时再点击按钮页面重新回到第一页？？
    async function nextPage() {
      // 抓取下一页按钮
      const nextBtn = document.querySelector('.next')
      let res = await getData(page1)
      // console.log(res)
      nextBtn.addEventListener('click', function () {
        if (page1 < res.allPage && page1 > 0) {
          page1++
          renderPage()
        } else {
          page1 = 1
          renderPage()
        }
      })
    }
    nextPage()

    async function lastPage() {
      const lastBtn = document.querySelector('.last')
      let res = await getData(page1)
      console.log(res)
      lastBtn.addEventListener('click', function () {
        if (page1 < res.allPage && page1 > 0) {
          page1--
          renderPage()
        } else {
          page1 = 1
          renderPage()
        }
      })
    }
    lastPage()

    // 3、新增评论功能
    // 3.1抓取发表评论按钮并注册点击事件
    function sendMsg() {
      const sendBox = document.querySelector('.btn')
      sendBox.addEventListener('click', function (e) {
        // 3.2在点击事件中，用if判断评论人及评论内容中是否都有值（!==null），否的话弹出提示框提示用户信息内容和昵称不能为空，是的话就把他们的值
        e.preventDefault()
        const form = document.querySelector('.cmt-form')
        let formdata = serialize(form, { hash: true, empty: true })
        console.log(formdata)
        if (formdata.content !== '' && formdata.username !== '') {
          axios({
            url: 'https://hmajax.itheima.net/api/addcmt',
            method: 'post',
            data: formdata
          }).then(res => {
            renderPage()
            form.reset()
          })
        }
      })
    }
    sendMsg()
    renderPage()
    // 4、删除评论功能
    // 抓取当前页码，抓取删除按钮并为其注册点击事件,每次删除评论后都要做判断,页面上还剩下多少条评论，如小于1就要删除当前页面,列表要自动回到上一页,并封装成函数（抓取元素，注册点击事件删除评论，每次点击后，要用if判断
    // 当前页面评论数量是否少于1，如当前页面评论数量小于1则删除当前页码
    function delContent() {
      msgList.addEventListener('click', function (e) {
        if (e.target.classList.contains('del')) {
          const id = e.target.dataset.id
          console.log(id);
          axios({
            url: 'https://hmajax.itheima.net/api/delcmt',
            params: {
              id: id
            }
          }).then(res => {
            renderPage(page1)
            // console.log(res)
            allPage = res.data.allPage
            // console.log(allPage)
            if (page1 > allPage) {
              page1 = allPage
              console.log(page1);
              renderPage()
            }
            renderPage()
          }).catch(err => {
            console.log(err)
          })
        }
      })
    }
    delContent()
    renderPage()
  </script>
</body>

</html>